// @flow
import React, { Component } from 'react'
import { Modal, Form, Input, message, Select, notification } from 'antd'
const Option = Select.Option
import universalFetch, { handleFetchError } from 'store/modules/fetch'
const FormItem = Form.Item
const formItemLayout = {
  labelCol: {
    xs: { span: 24 },
    sm: { span: 6 }
  },
  wrapperCol: {
    xs: { span: 24 },
    sm: { span: 14 }
  }
}

type Props = {
  form: Object,
  removeNode: Function,
  refreshPoint: Function,
  data: Object,
  partData: Array<Object>,
  devicePoint: Array<Object>,
  deviceId: string
}

type States = {
  visible: boolean,
  confirmLoading: boolean
}
class EditPoint extends Component {
  props: Props
  state: States
  closeModal: Function
  handleSubmit: Function
  constructor (props: Props) {
    super(props)
    this.state = {
      visible: true,
      confirmLoading: false
    }
    this.closeModal = this.closeModal.bind(this)
    this.handleSubmit = this.handleSubmit.bind(this)
  }

  closeModal () {
    this.setState({
      visible: false
    })
    this.props.removeNode()
  }

  handleSubmit () {
    const form = this.props.form
    form.validateFields((err, fieldsValue) => {
      if (err) {
        return false
      }
      this.setState({
        confirmLoading: true
      })
      const { refreshPoint, data, removeNode, deviceId } = this.props
      const values = {
        ...fieldsValue,
        rootId:deviceId
      }
      universalFetch(`${__SERVICE_API__}device/devices/points/${data.rid}`, {
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
        },
        method: 'PUT',
        body: JSON.stringify(values)
      })
      .then(res => res.json())
      .then((json) => {
        if (json.code !== 200000) {
          notification.error({
            message: '提醒',
            description: json.message,
            placement: 'topRight',
            top: 63
          })
          throw new Error(JSON.stringify({ code: json.code, message: json.message }))
        }
        this.setState({
          visible: false,
          confirmLoading: false
        })
        message.success('修改成功')
        refreshPoint()
        removeNode()
      })
      .catch((error) => {
        handleFetchError(error)
        console.error(error)
        this.setState({
          confirmLoading: false
        })
        message.error('修改失败: ' + error.message)
      })
    })
  }
  render () {
    const { getFieldDecorator } = this.props.form
    const { data, partData, devicePoint, deviceId } = this.props
    const { visible, confirmLoading } = this.state
    // console.log(partData);
    // console.log(devicePoint);
    // console.log(data);
    return (
      <Modal
        title='编辑测点'
        visible={visible}
        onCancel={this.closeModal}
        confirmLoading={confirmLoading}
        onOk={this.handleSubmit}
        >
        <Form>
          <FormItem {...formItemLayout} label='部件' hasFeedback>
            {getFieldDecorator('deviceId', {
              // initialValue: partData.filter((dd) => dd.name === data.deviceName)[0].id
              initialValue: deviceId
            })(
              <span>{data.deviceName}</span>
              // {
                // <Select disabled showSearch
                //   filterOption={(input, option) => {
                //     return option.props.children.indexOf(input) >= 0
                //   }} style={{ width:'100%' }} placeholder='请选择部件'>
                //   {
                //     partData.map((part, index) => {
                //       return <Option value={part.id} key={'part' + index}>{part.name}</Option>
                //     })
                //   }
                // </Select>
              // }
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='测点' hasFeedback>
            {getFieldDecorator('monitorPointId', {
              initialValue: devicePoint.filter((dd) => dd.sensorName === data.sensorName)[0].id
            })(
              <Select disabled showSearch
                filterOption={(input, option) => {
                  return option.props.children.indexOf(input) >= 0
                }} style={{ width:'100%' }} placeholder='请选择测点'>
                {
                  devicePoint.map((point, index) => {
                    return <Option value={point.id} key={'point' + index}>{point.sensorName}</Option>
                  })
                }
              </Select>
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='通道ID' hasFeedback>
            {getFieldDecorator('channelId', {
              rules: [
                { required: true, message: '请填写通道ID' }
              ],
              initialValue: data.channelId
            })(
              <Input placeholder='请填写通道ID' disabled />
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='通道名称' hasFeedback>
            {getFieldDecorator('channelName', {
              initialValue: data.channelName
            })(
              <Input placeholder='请填写通道名称' />
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='低报' hasFeedback>
            {getFieldDecorator('gtLimit', {
              initialValue: data.gtLimit
            })(
              <Input placeholder='低报' />
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='低低报' hasFeedback>
            {getFieldDecorator('ggtLimit', {
              initialValue: data.ggtLimit
            })(
              <Input placeholder='低低报' />
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='高报' hasFeedback>
            {getFieldDecorator('ltLimit', {
              initialValue: data.ltLimit
            })(
              <Input placeholder='高报' />
            )}
          </FormItem>
          <FormItem {...formItemLayout} label='高高报' hasFeedback>
            {getFieldDecorator('gltLimit', {
              initialValue: data.gltLimit
            })(
              <Input placeholder='高高报' />
            )}
          </FormItem>
        </Form>
      </Modal>
    )
  }
}

export default Form.create()(EditPoint)
